SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spAltaDeSubsidio] 
@Cuise int,
@Finalidad int,
@OrgIntermedia int,
@Monto varchar(10),
@Expediente varchar(10),
@Resolucion varchar(10),
@Imputacion int,  -- Presupuesto
@Subsidio int,
@Concepto varchar(50),
@Ejercicio int,
@Fecha varchar(10)
AS
SET NOCOUNT ON
set dateformat dmy

declare @Balance int
declare @Cuenta int
declare @FFEcha datetime
declare @Rendicion int
declare @idOrganizacion int
declare @FMonto float
declare @idSubSidioOAporte int
declare @idOrganizacionInt int

Select @idOrganizacion = idOrganizaciones from tb_Organizaciones where cuise = @Cuise
Select @idOrganizacionInt = idOrganizaciones from tb_Organizaciones where cuise = @OrgIntermedia
Select @FFecha = convert(datetime, @Fecha)
Select @Cuenta = idCuenta from tb_Cuentas where Organizacion = @idOrganizacion
Select @Balance = idBalance from tb_Balances where year(desde) = @ejercicio and cuenta = @cuenta
Select @FMonto = convert(float, @Monto)

if @Expediente = '-1'
	Select  @Expediente = null

if @Resolucion = '-1'
	Select  @Resolucion = null

if @OrgIntermedia = -1
	Select @OrgIntermedia = null

if @Subsidio <> -1 --Si se especifico un subsidio -> TOMAR EL SUBSIDIO QUE SE ESPECIFICO
	Select @Rendicion = rendicion from tb_RegistroContable where SubsidioOAporte = @Subsidio and Organizacion = @idOrganizacion
else -- Si no -> INSERTAR UN NUEVO SUBSIDIO
begin
	insert tb_Rendiciones Select 'Rendicion '+convert(varchar, @cuise)+' '+convert(varchar, @ejercicio), @FFecha, null, null
	Select @Rendicion = @@Identity
end

if exists (select * from tb_SubsidiosOAportes where expediente = @Expediente and resolucion = @Resolucion and PlazoDeVencimiento =  @FFecha)
	Select  @idSubsidioOAporte = idSubsidioOAporte from  tb_SubsidiosOAportes where expediente = @Expediente and resolucion = @Resolucion and PlazoDeVencimiento =  @FFecha
else
begin
	if @Expediente is null and @Resolucion is null
		Select @idSubSidioOAporte = idSubsidioOAporte from tb_SubsidiosOAportes Where Expediente = 'NING' and Resolucion = 'NING'
	else
	begin
		insert tb_SubsidiosOAportes Select @Expediente, @Resolucion, @FFecha
		Select @idSubSidioOAporte = @@identity
	end
end

declare @RegistroContable int

if @idOrganizacionInt is not null
begin
	if not exists(Select * from tb_RegistroContable where OrgIntermedia = @idOrganizacionInt and Finalidad = @Finalidad and Fecha = dateadd(day, -90, @FFecha))
	begin
		insert tb_RegistroContable (Organizacion, Ejercicio, Fecha, Concepto, TipoConcepto, Finalidad, Proveedor, FacturaODocumento,
		SaldoAnterior, Debe, Haber, Cuenta, Imputacion, Rendicion, Balance, Observaciones, OrgIntermedia, SubsidioOAporte)
		values (@idOrganizacionInt, @Ejercicio, dateadd(day,-90,@FFecha) , @Concepto, 122, @Finalidad, null, null, 0, 0, @FMonto, @Cuenta, @Imputacion, @Rendicion, @Balance, null, @idOrganizacionInt, @idsubsidioOaporte)
		Select @RegistroContable = @@Identity
		Insert tb_BeneficiariosDeSubsidios Select @RegistroContable, @idOrganizacion, @FMonto
	end
	else
	begin
		--print 'Org Int: '+convert(varchar, @idOrganizacionInt)
		--print 'Fecha '+convert(varchar,  dateadd(day, -90, @FFecha))
		Select @RegistroContable = max(idRegistroContable) from tb_RegistroContable Where Organizacion = @idOrganizacionInt and Fecha = dateadd(day, -90, @FFecha) 
		update tb_RegistroContable set Haber = Haber + @FMonto where idRegistroContable = @RegistroContable
		Insert tb_BeneficiariosDeSubsidios Select @RegistroContable, @idOrganizacion, @FMonto	
	end
end
else
begin
	insert tb_RegistroContable (Organizacion, Ejercicio, Fecha, Concepto, TipoConcepto, Finalidad, Proveedor, FacturaODocumento,
	SaldoAnterior, Debe, Haber, Cuenta, Imputacion, Rendicion, Balance, Observaciones, OrgIntermedia, SubsidioOAporte)
	values (@idOrganizacion, @Ejercicio, dateadd(day,-90,@FFecha) , @Concepto, 122, @Finalidad, null, null, 0, 0, @FMonto, @Cuenta, @Imputacion, @Rendicion, @Balance, null, null, @idsubsidioOaporte)
end

declare @idCuenta int
declare @debeX float
declare @haberX float
declare @saldo float
declare @SaldoAnterior float


	declare cuentas cursor for Select idCuenta from tb_Cuentas where idCuenta = @Cuenta
	declare @idRegistroContable int
	open cuentas

	fetch next from cuentas into @idCuenta

	while @@fetch_status = 0
	begin
		Select @SaldoAnterior = 0
		declare registros cursor for Select debe, haber, saldoAnterior, idRegistroContable from tb_RegistroContable where Cuenta = @idCuenta order by fecha
		open registros
		fetch next from registros into @debeX, @haberX, @saldo, @idRegistroContable
		while @@fetch_status = 0
		begin
			update tb_RegistroContable set saldoAnterior = @saldoAnterior + @HaberX - @DebeX where idRegistroContable = @idRegistroContable
			Select @SaldoAnterior = @saldoAnterior + @HaberX - @DebeX
			fetch next from registros into @debeX, @haberX, @saldo, @idRegistroContable
		end
		close registros
		deallocate registros
		fetch next from cuentas into @idCuenta
	end

	close cuentas
	deallocate cuentas
GO
